<?php
class CPartie extends \BaseController {
	private $partie;

	
	/* (non-PHPdoc)
	 * @see BaseController::index()
	 */
	public function index() {
		$this->loadView("vFooter");
		$this->viewCreateParty();
		$this->viewYourParty();
		$this->viewPartiesTerminees();
		echo JsUtils::execute("setInterval(function(){".JsUtils::_get("/trivia/CPartie/refreshPartie","{}", "#accordion-contentJoin")."},1000);");
		echo JsUtils::execute("setInterval(function(){".JsUtils::_get("/trivia/CPartie/refreshJoueur","{}", "#accordion-contentAdd")."},1000);");
		echo JsUtils::execute("setInterval(function(){".JsUtils::_get("/trivia/CPartie/refreshPartiesTerminees","{}", "#accordion-contentTerminees")."},1000);");
	}
	
	private function addNew(){
		$this->partie=new Partie();		
	}
	
	private function load($idPartie){
		$this->partie=DAO::getOne('Partie', $idPartie);
	}
	
	private function addPlayer($joueur){
		$result=false;
		if($this->partie->getJoueur1()==null){
			$this->partie->setJoueur1($joueur);
			if(DAO::insert($this->partie)==1){
				$result=true;
			}			
		}else if($this->partie->getJoueur2()==null){
			$this->partie->setJoueurEnCours($joueur);
			$this->partie->setJoueur2($joueur);
			if(DAO::update($this->partie)==1){
				$result=true;
			}			
		}
		return $result;
	}
	
	public function simpleParty($id){
		$id=str_replace("createParty","",$id[0]);
		$partie=new Partie();
		$joueur1=$this->loadPlayer();
		$joueur2=DAO::getOne("Joueur", $id);
		if($joueur1!=null && $joueur2!=null){
			$partie->setJoueur1($joueur1);
			$partie->setJoueur2($joueur2);
			$partie->setJoueurEnCours($joueur1);
			$partie->setTermine(false);
			if(DAO::insert($partie)==1){
				echo 'Partie créée avec succès !';
				$serie=new Serie();
				$serie->setJoueur($joueur1);
				$serie->setPartie($partie);
				$serie->setNombre(0);
				DAO::insert($serie);
				$serie->setJoueur($joueur2);
				$serie->setPartie($partie);
				$serie->setNombre(0);
				DAO::insert($serie);
			}else{
				echo 'Une erreur est survenue, impossible de créer la partie.';
			}	
		}else{
			echo 'Une erreur est survenue, impossible de charger les joueurs.';
		}
		
	}
	
	private function loadPlayer(){
		$joueur=null;
		if (array_key_exists('joueur', $_SESSION)){
			$joueur=$_SESSION['joueur'];			
		}
		return $joueur;
	}
	
	public function createParty(){
		if($this->loadPlayer()!=null){
			$joueur=$this->loadPlayer();
			$this->addNew();
			if($this->addPlayer($joueur)){
				echo 'Partie créée avec succès !';
			}else{
				echo 'Une erreur est survenue, impossible de créer la partie.';
			}			
		}
	}
	
	public function viewCreateParty(){
		$this->loadView("vAddParty",$this->displayJoueur());
		echo JsUtils::getAndBindTo(".trAddPartie", "click", "/trivia/CPartie/simpleParty/","{}","#messageNotif");
	}
	
	public function displayJoueur(){
		$joueur=$this->loadPlayer();		
		return DAO::getAll("Joueur","id <>".$joueur->getId()." AND idmonde=".$joueur->getMonde()->getId());
	}
	
	public function joinParty($id){
		$id=str_replace("joinParty","",$id[0]);
		$joueur=TriviaUtils::loadPlayer();
		$partie=DAO::getOne("Partie", $id);
		if($partie->getJoueur1()==$joueur){
			echo "Partie contre ".$partie->getJoueur2();
		}else{
			echo "Partie contre ".$partie->getJoueur1();
		}
		echo JsUtils::post("/trivia/CDomaine/index", "{idpartie:".$id."}", ".bloc_page");
	}
	
	
	public function refreshPartie(){
		$amdj=$this->adversairesAmdj();
		$aldj=$this->adversairesAldj();
		$this->loadView("vRefreshYourParty",array("amdj"=>$amdj,"aldj"=>$aldj));
		echo JsUtils::getAndBindTo(".lienJoin", "click", "/trivia/CPartie/joinParty/","{}","#messageNotif");
	}
	
	public function refreshPartiesTerminees(){
		$terminees=$this->partiesTerminees();
		//rechargement de la vue
		$this->loadView("vRefreshPartiesTerminees",array("terminees"=>$terminees));
	}
	
	public function refreshJoueur(){
		$this->loadView("vRefreshAddParty",$this->displayJoueur());
		echo JsUtils::getAndBindTo(".trAddPartie", "click", "/trivia/CPartie/simpleParty/","{}","#messageNotif");
	}
	
	public function adversairesAmdj(){
		$joueur=TriviaUtils::loadPlayer();
		$parties=DAO::getAll("Partie","(idJoueur1=".$joueur->getId()." OR idJoueur2=".$joueur->getId().") AND termine=0");
		$amdj=array();
		foreach($parties as $partie){
			if($partie->getJoueurEnCours()==$joueur){
				if($partie->getJoueur1()==$joueur){
					$partie->setJoueurEnCours($partie->getJoueur2());
				}else{
					$partie->setJoueurEnCours($partie->getJoueur1());
				}
				$amdj[]=$partie;
			}
		}
		return $amdj;
	}
	
	public function adversairesAldj(){
		$joueur=TriviaUtils::loadPlayer();
		$parties=DAO::getAll("Partie","(idJoueur1=".$joueur->getId()." OR idJoueur2=".$joueur->getId().") AND termine=0");
		$aldj=array();
		foreach($parties as $partie){
			if($partie->getJoueurEnCours()!=$joueur){				
				$aldj[]=$partie;
			}
		}
		return $aldj;	
	}
	
	public function partiesTerminees(){
		$joueur=TriviaUtils::loadPlayer();
		$parties=DAO::getAll("Partie","(idJoueur1=".$joueur->getId()." OR idJoueur2=".$joueur->getId().") AND termine=1");
		$terminees=array();
		foreach($parties as $partie){
			if($partie->getJoueurEnCours()==$joueur){
				if($partie->getJoueur1()==$joueur){
					$terminees[]=array("contre"=>$partie->getJoueur2(),"etat"=>"Perdu","class"=>"tdLose");
				}else{
					$terminees[]=array("contre"=>$partie->getJoueur1(),"etat"=>"Perdu","class"=>"tdLose");
				}
			}else{
				if($partie->getJoueur1()==$joueur){
					$terminees[]=array("contre"=>$partie->getJoueur2(),"etat"=>"Gagné","class"=>"tdWin");
				}else{
					$terminees[]=array("contre"=>$partie->getJoueur1(),"etat"=>"Gagné","class"=>"tdWin");
				}
			}
		}
		return $terminees;
	}

	public function viewYourParty(){
		$amdj=$this->adversairesAmdj();
		$aldj=$this->adversairesAldj();
		
		//chargement de la vue Mesparties
		$this->loadView("vYourParty",array("amdj"=>$amdj,"aldj"=>$aldj));
		
		//affichage partie contre notif
		echo JsUtils::getAndBindTo(".lienJoin", "click", "/trivia/CPartie/joinParty/","{}","#messageNotif");
	}
	
	public function viewPartiesTerminees(){
		$terminees=$this->partiesTerminees();
		//chargement de la vue
		$this->loadView("vPartiesTerminees",array("terminees"=>$terminees));
	}

	 
}